考慮了很久,這個占卜到底要用在哪裡...
先前測試的占卜方式,是從生活中容易迷惘事情裡挑選一個主題,進行「過去、現在、未來」的三張牌占卜。
這類占卜通常圍繞在比較重大的議題上,解讀的方向也偏向長時間的影響。
雖然功能運作沒問題,但整體感覺好像...有點嚴肅。
然後就想起了最常見的每日星座運勢分析!
既然功能已經備齊,不如趁鐵人賽結束之前,再加上一個輕鬆有趣的小占卜!
你是一位深具靈性與洞察力的塔羅占卜師。
你熟悉大阿爾克納與小阿爾克納的象徵意涵,能夠從每張牌的能量與圖像中,看出今日的情緒流動與生活狀態。
這次的占卜主題是:「今日運勢」。
請依序解讀四個面向:愛情運、事業運、財運。
每個面向各對應一張牌,最後再根據解讀結果評估整體運勢。
占卜風格設定:
你是一位具有以下特質的占卜師:
1. 專業(Professional)
說明每張牌的象徵、能量、與當下的意涵。
點出正位與逆位的差別,以及這股能量今日的流向。
2. 溫柔引導(Gentle Guidance)
不以提問的方式回應,而是以安定、理解的語氣描述今日的狀態。
讓問卜者在閱讀時產生共鳴與覺察,而非被要求回答。
3. 同理(Empathy)
理解今日情緒的起伏,語氣保持柔和與支持。
即使出現挑戰,也提醒對方能量正在轉化,不需過度擔心。
4. 啟發(Inspiration)
為每個面向給出一個具體的小建議或行動方向,
幫助問卜者以更輕鬆的態度面對今天的能量。
輸出格式建議:
🔹 愛情運:列出該張牌及正/逆位
描述今日在情感、人際互動上的能量與建議。
🔹 事業運:列出該張牌及正/逆位
說明工作、學習、或行動方向上的狀態與提醒。
🔹 財運:列出該張牌及正/逆位
說明金錢、物質、與機會流動的能量。
🔹 整體運勢
綜合前三張牌的能量,指出今日整體的氛圍與重點。
🔹 今日訊息
以一句溫柔的話作結,可以是祝福、鼓勵、或小提醒。
import json
from bedrock_service import BedrockService
from deck import DeckService
from s3_service import S3Service
from cards import tarot_deck
class DailyService:
def __init__(self, bucket, key):
# Service
s3_service = S3Service()
self.deckService = DeckService()
self.bedrock_service = BedrockService()
# 塔羅牌
self.deck = tarot_deck.copy()
info = s3_service.read_s3_file(bucket, key)
self.tarot_by_id = {o['id']: o for o in json.loads(info)}
# 系統提示
self.system_role = s3_service.read_s3_file(bucket, "daily_prompt.txt")
def daily_tarot(self):
self.deck = self.deckService.shuffle(self.deck)
cards = self.deckService.draw_card(self.deck, 3) # 抽隨機三張
# ===== 取得塔羅牌資訊 =====
cards_info = self.__get_tarot_infos(cards)
# 建構 prompt
prompt = f"""
請根據抽到的塔羅牌,為我解讀今日運勢:
愛情:{cards_info[0]}
事業:{cards_info[1]}
財運:{cards_info[2]}
"""
# 呼叫 Bedrock
return self.bedrock_service.daily_tarot_reading(self.system_role, prompt)
def __get_tarot_infos(self, cards):
cards_info = []
for i in range(3):
card_info = self.tarot_by_id.get(cards[i]['id'])
card = {
'card_id': card_info['id'],
'card_name': card_info['name_zh'],
'story': card_info['story']
}
if cards[i]['position'] == '↑':
card['position'] = 'upright'
card['keyword'] = card_info['upright_meta']['keywords']
else:
card['position'] = 'reversed'
card['keyword'] = card_info['reversed_meta']['keywords']
cards_info.append(card)
return cards_info
def lambda_handler(event, context):
# 接收 request
json_str = json.dumps(event)
body = json.loads(json_str)
message = body.get("message")
if message == "今日占卜":
service = DailyService(bucket, key)
return service.daily_tarot()
{
"message": "今日占卜"
}
生成內容的篇幅實在太長,另外做成好閱讀版:今日塔羅運勢解讀